﻿//
// Created by LiuYou on 2021/4/13.
//
struct Book {
    char title[20];
    char author[20];
    double value;

};
/**
 * @brief 结构体中的字符数组
 */
struct Name {
    char first[10];
    char last[10];
};
/**
 * @brief 结构体中的字符指针
 */
struct NamePtr {
    char* first;
    char* last;
};

/**
 * @brief 自定义数据类型
 *
 * 结构的初始化器
 *      可以按照任意顺序使用指定初始化器。
 *
 * 结构体中的字符数组和字符指针
 *      结构体中的字符数组如上面的 Name 结构体
 *          字符串是存储在结构体内部，该结构体要分配 20 type 存储姓名。
 *      结构体中的字符指针如上面的 NamePtr 结构体
 *          字符串是存储在内存的静态存储区，该结构体只是分配了 2 个地址，并没有给字符串分配任何存储空间。
 *          它使用的是存储在静态存储区的字符串。
 *
 * 复合字面值和结构
 *      如果只需要一个临时结构字面值，复合字面值很好用。
 *          (struct book) {"primer", "chong", 99.99}
 *          例: 《C Primer Plus》 P462~463
 *
 * 结构的匿名结构
 *      《C Primer Plus》 P465 C11特性，了解即可。
 *
 * union联合了解即可。
 *
 * 枚举类型，注意C枚举的一些特性C++是不允许的。
 *
 * typedef与#define
 *      * 与#define不同，typedef创建的符号名只受限于类型(type)，不能用于值。
 *      * typedef由编译器解释，不是预处理器。
 *      * typedef比#define更灵活。
 *      * typedef并没有创建任何新类型，它只是为某个已存在的类型增加了一个方便使用的标签。
 *      * typedef常用于给复杂的类型命名。这真的很难理解！！！！
 *          例:
 *              typedef char (* CHARFUNC ())[5];
 *              看不懂！！！！真的看不懂！！！！
 *      注意:
 *          typedef char* STRING;
 *          STRING name, sign;
 *          相当于
 *          char* name, * sign;
 *
 *          但是
 *          #define STRING char*
 *          STRING name, sign;
 *          相当于
 *          char* name, sign;
 *
 * 复杂声明
 *      《C Primer Plus》 P479~481
 *          这一部分真的看不懂！！！！
 *
 * 函数名可以表示函数的地址。
 *
 */
void customDataType() {
    // 结构的初始化器: 可以按照任意顺序使用指定初始化器。
    struct Book standardLibrary = {
            .value=99.99,
            .title="standard library",
            .author="ly"

    };

}

int main() {


    return 0;
}